package main

import "fmt"

func add(params ...int) (sum int) {
	for _, v := range params {
		sum += v
	}
	return
}

func add2(params []int) (sum int) {
	for _, v := range params {
		sum += v
	}
	return
}
func filter(score []int, f func(int) bool) []int {
	reSlice := make([]int, 0)
	for _, v := range score {
		if f(v) {
			reSlice = append(reSlice, v)
		}
	}
	return reSlice
}

type sub func(a, b int) int

func subImpl(a, b int) int {
	return a - b
}

func main() {
	fmt.Println(add(1, 2, 3, 4, 5))
	slice := []int{1, 2, 3, 4, 5}
	fmt.Println(add2(slice))

	fmt.Println(add(slice...)) // 省略号可以将slice打散

	arr := [...]int{1, 2, 3, 4, 5} //通过省略号来自动计算数组长度,来定义数组
	fmt.Println(arr)
	fmt.Printf("%T\n", arr)

	//匿名函数
	//1
	Func := func(a, b int) int {
		return a + b
	}
	fmt.Println(Func(1, 2))
	//2
	result := func(a, b int) int {
		return a + b
	}(1, 2)
	fmt.Println(result)
	//3
	fmt.Println(func(a, b int) int {
		return a + b
	}(1, 2))

	var mySub sub = subImpl
	fmt.Println(mySub(1, 2))
	var mySub1 sub = func(a, b int) int {
		return a - b
	}
	fmt.Println(mySub1(1, 2))

	// 将函数作为另外一个函数得参数
	//写一个函数用于过滤一部分数据
	score := []int{10, 50, 66, 70, 90}
	fmt.Println(filter(score, func(a int) bool {
		if a >= 60 {
			return true

		} else {
			return false
		}
	}))
	
}
